The era of the self-contained monolithic application is fading. To harness the power of modern multicore hardware and escape the nightmare of Class Path Hell, software architecture has evolved into the Mashup: a collection of microservices working in concert.
1. The Architectural Shift
Unlike traditional linear pipelines that process data sequentially, a mashup orchestrates data across multiple remote services (e.g., Twitter, Facebook, Google Translate). This necessitates moving away from blocking executions to non-blocking, asynchronous patterns.
2. Java 9 Modularization
Java 9 introduced a modular system to solve the "Monolithic JDK" problem. By using a module-info.java file, developers explicitly define the application structure:
- requires: Declares a dependency on another module.
- exports: Makes specific packages accessible to other modules.
3. Naming & Compatibility
Modules use reverse internet domain-naming (e.g., com.example.sentiment). For legacy support, any JAR without a module-info file on the module path becomes an automatic module, ensuring compatibility while migrating to the modular world.